package com.itheima.health.controller;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.health.constant.MessageConstant;
import com.itheima.health.constant.RedisMessageConstant;
import com.itheima.health.entity.Result;
import com.itheima.health.pojo.Order;
import com.itheima.health.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;


import java.util.Map;

@RestController
@RequestMapping("/order")
public class OrderController {

    //连接池
    @Autowired
    private JedisPool jedisPool;

    @Reference
    private OrderService orderService;

    /**
     * 提交预约
     * @param paraMap
     * @return
     */
    @PostMapping("/submit")
    public Result submit(@RequestBody Map<String,String> paraMap){

        //校验验证码
        //从连接池获取连接
        Jedis jedis = jedisPool.getResource();

        //获取手机号
        String telephone = paraMap.get("telephone");

        //拼接redis的值(业务类型，为了业务识别规范)(redis 存值的是键值)
        String key = RedisMessageConstant.SENDTYPE_ORDER + ":" + telephone;

        //从redis取出值
        String codeInRedis = jedis.get(key);

        //判断验证码是否为空
        if (StringUtils.isEmpty(codeInRedis)){

            //如果验证码为空，则提示，请重新获取验证码
            return new Result(false,"请重新获取验证码");
        }

        //如果不为空，则判断用户输入的验证码与生成的验证码是否一致
        if (!codeInRedis.equals(paraMap.get("validateCode"))){

            //如果不一致，则返回验证码错误信息
            return new Result(false, MessageConstant.VALIDATECODE_ERROR);
        }
        //如果一致，则删除验证码key，防止缓存过多
        jedis.del(key);

        //关闭
        jedis.close();

        //设预约类型，mobile代表手机微信预约
        paraMap.put("orderType", Order.ORDERTYPE_WEIXIN);

        //调用服务层，提交预约信息
        Integer id = orderService.submit(paraMap);

        //返回给页面
        return new Result(true,MessageConstant.ORDER_SUCCESS,id);
    }

    /**
     * 通过id查询订单信息，预约成功提示
     * @param id
     * @return
     */
    @GetMapping("/findById")
    public Result findById(int id){

        //调用业务层的方法，通过id查询订单信息
        Map<String, String> order = orderService.findOrderDetailById(id);

        //返回给页面
        return new Result(true, MessageConstant.QUERY_ORDER_SUCCESS,order);
    }
}
